package com.chilly.vidio.study.leetcode;

import java.util.Arrays;
import java.util.HashSet;

/**
 * 345. 反转字符串中的元音字母
 * a e i o u
 * 元音字母不包含字母 "y" 。
 *
 * @author Chilly Cui
 * @createDate 2021/3/3
 */
public class No345ReverseVowelsOfString {

    public static void main(String[] args) {
        String leetcode = new Solution().reverseVowels("leetcode");
        System.out.println(leetcode);
        //expect: leotcede
    }

    static class Solution {
        /**
         * 设定一个左指针i，一个右指针j，当i<j时，如果s[i]和s[j]同时为元音字母，则交换，
         * 并且交换之后i++,j--；如果s[i]不是元音字母，则i++;如果s[j]不是元音字母，则j--;
         */
        public String reverseVowels(String s) {
            final HashSet<Character> vowels = new HashSet<>(
                    Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
            int left = 0;
            int right = s.length() - 1;
            char[] chars = s.toCharArray();
            while (left < right) {
                if (vowels.contains(chars[left]) && vowels.contains(chars[right])) {
                    char tmp = chars[left];
                    chars[left] = chars[right];
                    chars[right] = tmp;
                }
                // 加1减1 否则会进入死循环
                left++;
                right--;
            }
            return new String(chars);
        }
    }
}
